Amazon S3のアクセス制御 選び方・設定ガイド

Amazon S3のアクセス制御 選び方・設定ガイド

Clock Icon2024.09.25

はじめに

こんにちは。アノテーションの岩橋です。

Amazon S3 はAWSの代表的なサービスで、データを効率的かつ安全に管理するための多くのオプションが用意されています。
しかし、S3バケットやオブジェクトへのアクセス制御方法が多く、混乱することもあると思います。
今回は、どのようなユースケースにどのアクセス制御が最適なのか、初心者向けに解説します。また、それぞれの設定方法や再設定の可否についても説明します。

アクセス制御の選択肢

Amazon S3 でデータへのアクセスを管理する方法は主に以下の5つです。
署名付きURL (presigned URL) と パブリックアクセス設定 は、特定の用途に対して直接的なアクセス許可を提供する制御方法です。

  1. バケットポリシー
  2. IAMポリシー
  3. アクセスコントロールリスト (ACL)
  4. 署名付きURL (presigned URL)
  5. パブリックアクセス設定

それぞれに特徴がありますので、マネジメントコンソール上での設定方法とともにお伝えします。
 ※アクセスコントロールリスト (ACL) は現在非推奨のため、操作方法を割愛します。
今回は紹介しませんが、全て AWS CLI や AWS SDK でも設定可能です。

1. バケットポリシー:S3バケット専用のアクセス管理

リソースベースのポリシーです。S3バケット全体に対するアクセス権をJSON形式のポリシーで設定します。外部パートナーや他のAWSアカウントへの細かいアクセス管理が可能です。

特徴:

  • S3バケット全体に一貫したアクセスルールを設定可能
  • 複数のユーザーやアカウントに対して、包括的なアクセス管理が可能

使用シーン: [1]

  • 1つのバケット、または少数のバケットへのアクセスを許可する場合
  • バケットごとのアクセス許可が類似している場合
  • AWSアカウント所有者が、別のAWSアカウントのユーザーとバケット/オブジェクトを共有したい場合(クロスアカウント)

設定方法:

S3バケット作成後のみ設定できます。S3バケットを選択し、「アクセス許可」タブから「バケットポリシー」セクションの編集をします。ここでJSON形式のポリシーを設定することができます。
スクリーンショット 2024-08-24 20.01.51

後からの変更:
ポリシーは後から編集可能です。要件が変わった場合に柔軟に対応できます。

2. IAMポリシー:AWS全体をまたいでアクセスを管理したいならこれ!

アイデンティティベースのポリシーです。IAMポリシーは、AWSアカウント内のユーザーやロールに対してアクセス権を設定するための方法です。S3に限らず、他のAWSリソースへのアクセス権も一元管理できるため、総合的な権限管理に適しています。

特徴:

  • S3だけでなく、AWS全体のリソースに対してアクセス管理が可能
  • ユーザーやロールに基づいた細かい権限設定ができる

使用シーン: [1:1]

  • S3だけでなく、他のAWSリソースにもアクセス管理が必要な場合
  • バケットごとのアクセス許可が異なる多数のバケットがあり、管理するユーザーロールが少数である場合

設定方法:

IAMコンソールから「ポリシー」を選択し、新しいポリシーを作成します。JSON形式のポリシーを記述し、特定のユーザーやロールにアタッチします。 IAMポリシー を視覚的に作成できるビジュアルエディタを使うこともできます。
スクリーンショット 2024-08-24 9.42.26
スクリーンショット 2024-08-24 9.41.50

後からの変更:
IAMポリシー は、組織のセキュリティポリシーに応じて適宜変更できます。

3. アクセスコントロールリスト (ACL):非推奨だが特殊な場合には有効

ACL は、バケットやオブジェクトごとにアクセス権を細かく設定するための方法です。
しかし、設定が複雑で誤設定によるセキュリティリスクが高いため、現在は非推奨とされています。

各オブジェクトのアクセスを個別に制御したり、アップロードするデータをオブジェクトライターに所有させたりする必要がない限り、 ACL を無効にすることをお勧めします。

特徴:

  • 他のアクセス制御方法が使えない場合の最後の手段

使用シーン:

特定のユースケースで、オブジェクトごとに異なるアクセス権を設定する必要があるとき [2]

  • CloudFrontのアクセスログをS3に保存する場合 [3]
  • オブジェクトレベルで権限を管理する場合

4. 署名付きURL (presigned URL) :一時的なアクセス共有にはこれ!

署名付きURL (presigned URL) は、特定のS3オブジェクトへの一時的なアクセス権をURLとして提供する方法です。指定した時間内でのみアクセスが許可され、期限が過ぎると無効になります。

特徴:

  • 短期間のアクセス共有に最適
  • セキュリティを保ちながら外部ユーザーにデータを共有できる

使用シーン:

  • 一時的に外部ユーザーにファイルを共有する必要がある場合
  • ウェブアプリケーションやサービスで、特定のユーザーに期間限定でデータを提供する場合

注意点:

共有したオブジェクトのスクリーンショットやダウンロードの制限を直接かけることはできません。また、URLが第三者に漏洩するリスクがあるため、URLの共有には注意が必要です。

設定方法:

  1. 作成後バケットでオブジェクトにチェックを入れ、「アクション」の「署名付きURLで共有」を押す
  2. 「署名付きURLで「〇〇」を共有」というポップアップが出る
  3. 有効期限を入力し、署名付きURL を作成する
    この手順で 署名付きURL (presigned URL) が発行されます。
    スクリーンショット 2024-08-23 15.49.49
    スクリーンショット 2024-08-24 9.13.25

後からの変更:
署名付きURL (presigned URL) の有効期限は生成時に決定されますが、URLが生成された後に期限を変更することはできません。必要に応じて新しいURLを生成する必要があります。

5. パブリックアクセス設定:誰でもアクセスできるようにする場合

S3バケットやオブジェクトをインターネット全体に公開したい場合、 パブリックアクセス を有効にすることで、誰でも指定されたオブジェクトにアクセスできるようになります。バケットポリシーと併せて利用します。
S3バケットを意図せず公開してしまうことが多かったことを背景に実装された機能ですので、基本的にはパブリックアクセスをブロックするように設定してください。 [4]

特徴:

  • Webサイトのホスティングや、誰でもアクセス可能なリソースを提供する場合に有効

使用シーン:

  • 公開する必要がある画像やドキュメントをS3でホストする場合(Webサイトとして公開)
  • Amazon CloudFront を使わずに静的WebサイトをS3バケットにホスティングする場合

注意点:

パブリックアクセス を有効にすることは非常にリスクが伴います。誤って機密データを公開してしまうと、重大なセキュリティインシデントに繋がる可能性があります。パブリックアクセス を有効にする際は、次の2点を慎重に確認してください。

  • 前提として重要なデータは入れないこと
  • 公開対象のデータが適切であること

設定方法: [5]

  • S3バケット作成時に、「このバケットのブロックパブリックアクセス設定」セクションの「パブリックアクセスをすべて ブロック」のチェックを外す。
    スクリーンショット 2024-08-23 15.37.57

  • バケット作成後も変更可能です。S3バケットを開き、「アクセス許可」タブの「ブロックパブリックアクセス (バケット設定)」セクションで、「編集」を選択し、「パブリックアクセスをすべてブロック」のチェックを外してください。
    スクリーンショット 2024-08-23 15.40.33

用語説明:

  1. 新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする:
    新規追加したバケットやオブジェクトにACLで公開設定をしても、その設定をブロックする
    既存バケット・オブジェクトには影響しない

  2. 任意のアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする:
    新規・既存のバケット・オブジェクトに対して、ACLを通じて設定されたパブリックアクセスをブロックする

  3. 新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする:
    新規のバケットポリシーにおける公開設定をブロックする
    既存ポリシーには影響しない

  4. 任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする:
    新規と既存のバケットポリシー全てで設定された公開設定をブロックする

後からの変更:
上述の通り、 パブリックアクセス設定 は後から変更可能です。アクセス権を制限する必要がある場合は、 パブリックアクセスを無効にすることができます。

まとめ:結局どれが最適?

ユースケースによって組み合わせてアクセス制御してください。
特にバケットポリシーIAMポリシーの組み合わせは管理が一貫しているため誤設定のリスクが少なく、安全にデータを保護できます。

  • 長期的かつ包括的なアクセス管理を行う場合は、バケットポリシーやIAMポリシーを使用しましょう。また、ポリシーの競合や過剰なアクセス許可には注意してください。
  • 一時的なアクセス共有が必要な場合は、署名付きURL (presigned URL) を利用すると便利です。
  • ACLは基本的に非推奨です。特別な理由がない限り使用を避けましょう。
  • パブリックアクセスを有効にする際は、リスクを十分理解した上で使用し、公開するデータが適切であることを確認してください。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

参考資料

脚注
  1. アクセス管理のユースケース ↩︎ ↩︎

  2. S3 のオブジェクト ACL を有効化にするケースまとめ ↩︎

  3. 標準ログ (アクセスログ) を設定および使用する ↩︎

  4. Amazon S3 ブロックパブリックアクセス ↩︎

  5. [小ネタ] AWS アカウントレベルの S3 ブロックパブリックアクセスが設定されていて S3 のオブジェクトを公開するのに少し手間取った ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.